import {defineStore} from "pinia";
import Message from "@/components/library/Message";

export const useCartStore=defineStore('cart',{
    state:()=>{
        return{
            list:[]
        }
    },
    persist:true,
    actions:{
        setCartList(arr){
            this.list=arr
        },
        addCart(payload){
        // 1.已添加过的商品
        // 2.没有添加过的添加到列表前面
            const index = this.list.findIndex(item => item.skuId === payload.skuId)
            if (index >= 0) {
                this.list[index].count += payload.count
            } else {
                this.list.unshift(payload)
            }
        },
        // 删除购物车商品
        deleteCart ( skuId) {
            const index = this.list.findIndex(item => item.skuId === skuId)
            this.list.splice(index, 1)
        },
        // 更新修改购物车商品对象
        updateCart ( goods) {
            const obj = this.list.find(item => item.skuId === goods.skuId)
            for (const key in goods) {
                if (goods[key] !== null) {
                    obj[key] = goods[key]
                }
            }
        },
        // 做有效商品的全选
        checkAllCart ( selected) {
            return new Promise(resolve => {
                    // 2. 未登录 - 直接修改本地
                    this.validList.forEach(item => {
                        item.selected = selected
                       this.updateCart(item)
                    })
                    resolve()
            })
        },
        // 批量删除选中商品
        batchDeleteCart ( isInvalid) {
            return new Promise(resolve => {
                    // 2. 未登录 - 直接修改本地
                    this[
                        isInvalid === true ? 'invalidList' : 'selectedList'
                        ].forEach(item => {
                        // 调用 commit 才能修改仓库的数据
                        this.deleteCart(item.skuId)
                    })
                    resolve()
            })
        },
        // 修改sku规格函数
        updateCartSku ( { oldSkuId, newSku }) {
            return new Promise(resolve => {
                    // 2. 未登录 - 直接修改本地
                    // 1. 获取旧的商品信息
                    const oldGoods = this.list.find(item => item.skuId === oldSkuId)
                    console.log(oldGoods)
                    // 2. 删除旧的商品

                this.deleteCart(oldSkuId)
                    // 3. 合并一条新的商品信息
                    const newGoods = { ...oldGoods, ...newSku, stock: newSku.inventory }
                    // 4. 新商品信息添加到购物车列表中
                    this.addCart(newGoods)
                    resolve()

            })
        },
    },
    getters:{
        // 有效商品列表
        validList () {
            return this.list.filter(item => item.stock > 0 && item.isEffective)
        },
        // 有效商品件数
        validTotal () {
            return this.validList.reduce((p, c) => p + c.count, 0)
        },
        // 有效商品总金额
        validAmount () {
            return this.validList.reduce((p, c) => p + c.nowPrice * 100 * c.count, 0) / 100
        },
        // 选中商品总金额
        selectedAmount () {
            return this.selectedList.reduce((p, c) => p + (c.nowPrice * 100 * c.count), 0) / 100
        },
        // 无效商品列表
        invalidList () {
            return this.list.filter(item => !(item.stock > 0 && item.isEffective))
        },
        // 选中商品列表
        selectedList ( ) {
            return this.validList.filter(item => item.selected)
        },
        // 选中商品件数
        selectedTotal ( ) {
            return this.selectedList.reduce((p, c) => p + c.count, 0)
        },
        // 是否全选
        isCheckAll ( ) {
            return this.validList.length === this.selectedList.length && this.selectedList.length !== 0
        }
    }
})
